package com.school.sports.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Min;
import java.time.LocalDateTime;

/**
 * 运动项目实体类
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("project")
public class Project {
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 项目名称
     */
    @NotBlank(message = "项目名称不能为空")
    private String name;

    /**
     * 项目类型：径赛、田赛、球类、其他
     */
    @NotBlank(message = "项目类型不能为空")
    private String type;

    /**
     * 性别限制：男、女、无
     */
    private String genderLimit;

    /**
     * 最大参赛人数
     */
    @NotNull(message = "最大参赛人数不能为空")
    @Min(value = 1, message = "最大参赛人数至少为1")
    private Integer maxPlayers;

    /**
     * 轮次数量
     */
    @Min(value = 1, message = "轮次数量至少为1")
    private Integer rounds;

    /**
     * 规则描述
     */
    private String ruleDescription;

    /**
     * 状态：未开始、报名中、进行中、已结束、已取消
     */
    private String status;

    /**
     * 创建人ID
     */
    private Long createdBy;

    /**
     * 创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    private LocalDateTime updatedAt;

    /**
     * 逻辑删除标记：0-未删除，1-已删除
     */
    private Integer deleted;

    /**
     * 创建人对象（关联查询时使用）
     */
    @TableField(exist = false)
    private User creator;

    /**
     * 报名人数（统计字段）
     */
    @TableField(exist = false)
    private Integer registrationCount;

    /**
     * 项目类型枚举
     */
    public enum ProjectType {
        TRACK("径赛"),
        FIELD("田赛"),
        BALL("球类"),
        OTHER("其他");

        private final String displayName;

        ProjectType(String displayName) {
            this.displayName = displayName;
        }

        public String getDisplayName() {
            return displayName;
        }
    }

    /**
     * 性别限制枚举
     */
    public enum GenderLimit {
        MALE("男"),
        FEMALE("女"),
        NONE("无");

        private final String displayName;

        GenderLimit(String displayName) {
            this.displayName = displayName;
        }

        public String getDisplayName() {
            return displayName;
        }
    }

    /**
     * 项目状态枚举
     */
    public enum ProjectStatus {
        NOT_STARTED("未开始"),
        REGISTRATION_OPEN("报名中"),
        IN_PROGRESS("进行中"),
        COMPLETED("已结束"),
        CANCELLED("已取消");

        private final String displayName;

        ProjectStatus(String displayName) {
            this.displayName = displayName;
        }

        public String getDisplayName() {
            return displayName;
        }
    }
}